home *** CD-ROM | disk | FTP | other *** search
- (* Micro Cornucopia Magazine Issue #49
- Units and Modules Figure 2 - Binary tree unit *)
-
- unit GenBinTree;
-
- (*
- Author: Michael S. Hunt Date: June 1, 1989
- This source code is release into the public domain.
- *)
-
- interface
-
- type dataPtr = ^data;
- data = char;
- treePtr = ^treeNode;
- treeNode = record
- llink, rlink : treePtr;
- data, key : dataPtr;
- datalen, keyLen : word
- end (* treeNode *);
-
- procedure GenBinInsert (var node : treePtr; key : dataPtr; keyLen : word;
- data : dataPtr; dataLen : word);
-
- procedure GenBinRetDelSmRec (var node : treePtr;
- var key : dataPtr; var keyLen : word;
- var data : dataPtr; var dataLen : word);
- implementation
-
- procedure GenBinInsert (var node : treePtr;
- key : dataPtr; keyLen : word;
- data : dataPtr; dataLen : word);
- begin
- if node = NIL then
- begin
- new(node);
- node^.data := data;
- node^.dataLen := dataLen;
- node^.key := key;
- node^.keyLen := keyLen;
- node^.llink := NIL;
- node^.rlink := NIL
- end
- else if key^ < node^.key^ then
- GenBinInsert(node^.llink, key, keyLen, data, dataLen)
- else if key^ >= node^.key^ then
- GenBinInsert(node^.rlink, key, keyLen, data, dataLen)
- end (* GenBinInsert *);
-
- procedure GenBinRetDelSmRec (var node : treePtr;
- var key : dataPtr; var keyLen : word;
- var data : dataPtr; var dataLen : word);
- var delNode : treePtr;
- begin
- if node^.llink = NIL then
- begin
- data := node^.data;
- dataLen := node^.dataLen;
- key := node^.key;
- keyLen := node^.keyLen;
- delNode := node;
- node := node^.rlink;
- Dispose(delNode);
- end
- else
- GenBinRetDelSmRec(node^.llink, key, keyLen, data, dataLen)
- end; (* GenBinRetDelSmRec *)
-
- begin
- end.